package com.bookocean.controller.dto;

import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 小说数据传输对象
 * 
 * @author BookOcean
 * @since 2024-01-01
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class NovelDto {
    
    /**
     * 小说ID
     */
    private Long id;
    
    /**
     * 小说标题
     */
    @NotBlank(message = "小说标题不能为空")
    private String title;
    
    /**
     * 小说简介
     */
    private String description;
    
    /**
     * 题材/标签
     */
    private String tags;
    
    /**
     * 封面图片URL
     */
    private String coverUrl;
    
    /**
     * 小说状态：1-招募中，2-进行中，3-已完结
     */
    @NotNull(message = "小说状态不能为空")
    private Integer status;
    
    /**
     * 是否为单人创作：1-单人，2-多人
     */
    @NotNull(message = "创作模式不能为空")
    private Integer creationType;
    
    /**
     * 目标章节数（多人创作时使用）
     */
    private Integer targetChapterCount;
    
    /**
     * 当前章节数
     */
    private Integer currentChapterCount;
    
    /**
     * 创建者ID
     */
    private Long creatorId;
    
    /**
     * 创建者昵称
     */
    private String creatorNickname;
    
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
    
    /**
     * 点赞数
     */
    private Integer likeCount;
    
    /**
     * 评论数
     */
    private Integer commentCount;
    
    /**
     * 收藏数
     */
    private Integer favoriteCount;
    
    /**
     * 当前用户是否已点赞
     */
    private Boolean isLiked;
    
    /**
     * 当前用户是否已收藏
     */
    private Boolean isFavorited;
    
    /**
     * 当前用户是否为参与者
     */
    private Boolean isParticipant;
    
    /**
     * 参与者列表（用于多人创作展示）
     */
    private List<NovelParticipantDto> participants;
    
    /**
     * 章节列表（详情页使用）
     */
    private List<NovelChapterDto> chapters;
}
